#pragma once
#include "../functions.h"

void triangle_type() {
  const short operation = get_choice("Опции", {"Через стороны", "Через углы"});

  double a, b, c, max, sum;
  vector<double> numeric_array;
  string result, result_1, result_2;

  switch (operation) {
    case 1:
      a = numeric_input("Первая сторона треугольника");
      b = numeric_input("Вторая сторона треугольника");
      c = numeric_input("Третья сторона треугольника");

      if (a + b <= c || a + c <= b || b + c <= a) {
        print_error("Такого треугольника не существует");
        break;
      }

      numeric_array = {a, b, c};
      sort(numeric_array.begin(), numeric_array.end());
      max = pow(numeric_array[2], 2);
      sum = pow(numeric_array[0], 2) + pow(numeric_array[1], 2);

      result_1 = (a == b == c)                  ? "Равносторонний"
                 : (a == b || a == c || b == c) ? "Равнобедренный"
                                                : "Разносторонний";
      result_2 = (max > sum)   ? "Тупоугольный"
                 : (max < sum) ? "Остроугольный"
                               : "Прямоугольный";
      result = result_1 + ", " + result_2;
      cout << "Треугольник ";

      break;
    case 2:
      a = numeric_input("Первый угол треугольника");
      b = numeric_input("Второй угол треугольника");
      c = numeric_input("Третий угол треугольника");

      if (a + b + c > 180) {
        print_error("Такого треугольника не существует");
        break;
      }

      result_1 = (a == b == c)                  ? "Равносторонний"
                 : (a == b || a == c || b == c) ? "Равнобедренный"
                                                : "Разносторонний";
      result_2 = (a > 90 || b > 90 || c > 90)   ? "Тупоугольный"
                 : (a < 90 && b < 90 && c < 90) ? "Остроугольный"
                                                : "Прямоугольный";
      result = result_1 + ", " + result_2;
      cout << "Треугольник ";

      break;
  }
}